package com.zzl.study.demo.utils;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;

/**
 * 天气预报格式化工具类
 *
 * @author: zhangzl
 * @date: 2025/10/9 14:17
 * @version: 1.0
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class WeatherFormatUtil {

    /**
     * 获取天气代码对应的描述
     *
     * @param code 天气代码
     * @return 天气描述
     */
    public static String getWeatherDescription(int code) {
        return switch (code) {
            case 0 -> "晴朗";
            case 1, 2, 3 -> "多云";
            case 45, 48 -> "雾";
            case 51, 53, 55 -> "毛毛雨";
            case 56, 57 -> "冻雨";
            case 61, 63, 65 -> "雨";
            case 66, 67 -> "冻雨";
            case 71, 73, 75 -> "雪";
            case 77 -> "雪粒";
            case 80, 81, 82 -> "阵雨";
            case 85, 86 -> "阵雪";
            case 95 -> "雷暴";
            case 96, 99 -> "雷暴伴有冰雹";
            default -> "未知天气";
        };
    }

    /**
     * 获取风向描述
     *
     * @param degrees 风向角度
     * @return 风向描述
     */
    public static String getWindDirection(int degrees) {
        if (degrees >= 337.5 || degrees < 22.5) {
            return "北风";
        }
        if (degrees >= 22.5 && degrees < 67.5) {
            return "东北风";
        }
        if (degrees >= 67.5 && degrees < 112.5) {
            return "东风";
        }
        if (degrees >= 112.5 && degrees < 157.5) {
            return "东南风";
        }
        if (degrees >= 157.5 && degrees < 202.5) {
            return "南风";
        }
        if (degrees >= 202.5 && degrees < 247.5) {
            return "西南风";
        }
        if (degrees >= 247.5 && degrees < 292.5) {
            return "西风";
        }
        return "西北风";
    }

    /**
     * 获取欧洲AQI等级描述
     *
     * @param aqi AQI
     * @return AQI等级描述
     */
    public static String getAqiLevel(Integer aqi) {
        if (aqi <= 20) {
            return "优 (0-20): 空气质量非常好";
        } else if (aqi <= 40) {
            return "良 (20-40): 空气质量良好";
        } else if (aqi <= 60) {
            return "中等 (40-60): 对敏感人群可能有影响";
        } else if (aqi <= 80) {
            return "较差 (60-80): 对所有人群健康有影响";
        } else if (aqi <= 100) {
            return "差 (80-100): 可能对所有人群健康造成损害";
        } else {
            return "非常差 (>100): 对所有人群健康有严重影响";
        }
    }

    /**
     * 获取美国AQI等级描述
     *
     * @param aqi AQI
     * @return AQI等级描述
     */
    public static String getUsAqiLevel(Integer aqi) {
        if (aqi <= 50) {
            return "优 (0-50): 空气质量令人满意，污染风险很低";
        } else if (aqi <= 100) {
            return "良 (51-100): 空气质量尚可，对极少数敏感人群可能有影响";
        } else if (aqi <= 150) {
            return "对敏感人群不健康 (101-150): 敏感人群可能会经历健康影响";
        } else if (aqi <= 200) {
            return "不健康 (151-200): 所有人可能开始经历健康影响";
        } else if (aqi <= 300) {
            return "非常不健康 (201-300): 健康警告，所有人可能经历更严重的健康影响";
        } else {
            return "危险 (>300): 健康警报，所有人更可能受到影响";
        }
    }

}
